package com.atguigu.jxc.service.impl;

import com.atguigu.jxc.dao.GoodsTypeDao;
import com.atguigu.jxc.domain.ServiceVO;
import com.atguigu.jxc.domain.SuccessCode;
import com.atguigu.jxc.entity.GoodsType;
import com.atguigu.jxc.entity.Unit;
import com.atguigu.jxc.service.GoodTypeService;
import com.atguigu.jxc.vo.GoodsTypeVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @Author: zhao
 * @Date: 2020/12/3 13:14
 */
@Service
public class GoodTypeServiceImpl implements GoodTypeService {

    @Autowired
    private GoodsTypeDao goodsTypeDao;

    /**
     * 数据转换
     */
    private GoodsTypeVo goodsTypeToGoodsTypeVo(GoodsType goodsType) {
        GoodsTypeVo goodsTypeVo = new GoodsTypeVo();

        goodsTypeVo.setId(goodsType.getGoodsTypeId());
        goodsTypeVo.setText(goodsType.getGoodsTypeName());

        Map<String, Integer> map = new HashMap<>();
        map.put("state", goodsType.getGoodsTypeState());
        goodsTypeVo.setAttributes(map);

        return goodsTypeVo;
    }

    /**
     * 查询商品所有分类
     *
     * @return
     */
    @Override
    public List<GoodsTypeVo> getGoodsCategory() {
        //1、查询所有类目
        List<GoodsType> goodTypeList = goodsTypeDao.selectGoodsType();
        List<GoodsTypeVo> goodsTypeVoList = new ArrayList<>();

        //获取一级菜单，1代表一级目录
        for (GoodsType goodsType : goodTypeList) {
            int s = goodsType.getGoodsTypeId();
            if (s == 1) {
                goodsTypeVoList.add(goodsTypeToGoodsTypeVo(goodsType));
            }
        }
        //查询子节点
        findgoodsTypeVoList(goodTypeList, goodsTypeVoList);

        return goodsTypeVoList;
    }


    /**
     * 递归查询子节点
     *
     * @param goodTypeList    //要查询的数据
     * @param goodsTypeVoList //存放数据
     */
    private void findgoodsTypeVoList(List<GoodsType> goodTypeList, List<GoodsTypeVo> goodsTypeVoList) {
        //遍历一级
        for (GoodsTypeVo goodsTypeVo : goodsTypeVoList) {
            //用于存放一级下的子目录
            List<GoodsTypeVo> typeVoList = new ArrayList<>();
            //查询子级
            for (GoodsType goodsType : goodTypeList) {
                //判断当前目录是否是子父级节点
                if (goodsTypeVo.getId().equals(goodsType.getPId())) {
                    typeVoList.add(goodsTypeToGoodsTypeVo(goodsType));
                }

                //递归调用
                findgoodsTypeVoList(goodTypeList, typeVoList);
            }

            //将查询的数据存入一级目录
            goodsTypeVo.setChildren(typeVoList);

//            Map<String, Integer> map = new HashMap<>();
//            map.put("state", typeVoList.size());
//            goodsTypeVo.setAttributes(map);
        }
    }

    /**
     * 查询所有商品单位
     *
     * @return
     */
    @Override
    public List<Unit> getAllUnit() {
        List<Unit> unitList = goodsTypeDao.getAllUnit();
        return unitList;
    }

    /**
     * 新增分类
     *
     * @param goodsTypeName
     * @param pId
     * @return
     */
    @Override
    public ServiceVO addGoodsType(String goodsTypeName, Integer pId) {

        GoodsType goodsType = new GoodsType();
        goodsType.setGoodsTypeName(goodsTypeName);
        goodsType.setPId(pId);
        goodsType.setGoodsTypeState(0);
        goodsTypeDao.addGoodsType(goodsType);

        return new ServiceVO<>(SuccessCode.SUCCESS_CODE, SuccessCode.SUCCESS_MESS, null);
    }


    /**
     * 删除分类
     * @param goodsTypeId
     * @return
     */
    @Override
    public ServiceVO deleteGoodsType(Integer goodsTypeId) {
        goodsTypeDao.deleteGoodsType(goodsTypeId);

        return new ServiceVO<>(SuccessCode.SUCCESS_CODE, SuccessCode.SUCCESS_MESS, null);
    }




}
